#ifndef Parabole_HPP_
#define Parabole_HPP_

#include "../UnconstrainedProblem.hpp"

class Parabole: public UnconstrainedProblem {

public:
	Parabole(Index dimension);

	bool get_nlp_info(Index& n, Index& nnz_h_lag);

	bool get_starting_point(Index n, Number* x);

	bool
	eval_f(Index n, const Number* x, bool new_x, Number& obj_value);

	bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f);

	/** Method to return:
	 *   1) The structure of the hessian of the lagrangian (if "values" is NULL)
	 *   2) The values of the hessian of the lagrangian (if "values" is not NULL)
	 *
	 *  If this method returns 'false', quasi-newton method for interpolation is used to compute second derivatives
	 */
	void eval_h(Index n, const Number* x, bool new_x, Number obj_factor,
			Index nz_ele_hess, Index* iRow, Index* jCol, Number* values);

	//should return true if eval_h is implemented
	bool isSecondDerivativesImplemented();

	void newX(const Number* x);
};

#endif /* Parabole_HPP_ */
